要讓 AI 記住對話,可以建立一個 List,並將對話紀錄加進 List 中,就如昨天所說 AI 就能根據歷史訊息回答相關問題
程式碼中只需在發問前將訊息加入 List,之後將整串 List 發送給 AI
@RestController
@RequiredArgsConstructor
public class AiClientController {
private final ChatClient chatClient;
private List<Message> memMessage = new ArrayList<>();
@GetMapping("/memchat")
public String chat(@RequestParam String prompt) {
memMessage.add(new UserMessage(prompt));
ChatResponse chatResponse = chatClient.prompt()
.messages(memMessage)
.call()
.chatResponse();
return chatResponse.getResult().getOutput().getContent();
}
}
可以看出 API 早就設計好了,.messages()
可以直接傳入 List,AI 會自動將最後一筆 UserMessage 當成提問,之前的 UserMessage 則會當成歷史對話
來看看測試結果
1.發問: 我是凱文大叔,之後回答問題請都先叫我的名字
2.發問: 目前的模型是甚麼版本
AI 不只能記住之前的對話,還能依要求每次都先稱呼我
如果要有更好的記憶效果,還能把 AI 回答的 Message 也加入 List
memMessage.add(chatResponse.getResult().getOutput());
//返回結果前先將 AssistantMessage 加入List
這樣我們就完成一個有超強記憶的聊天機器人了,不過思考一下這程式有甚麼問題?
要做到這些功能雖不難,但還挺繁瑣的,好在 Spring AI 在 1.0.0-SNAPSHOT 增加了 ChatMemory
,繁瑣的操作就交給 Spring AI 來處理,明天就來看看如何使用 Spring AI 提供的記憶類別
今天學到甚麼?
今日程式碼: https://github.com/kevintsai1202/SpringBoot-AI-Day17.git
凱文大叔使用 Java 開發程式超過 20 年,對於 Java 生態非常熟悉,曾使用反射機制開發 ETL 框架,對 Spring 背後的原理非常清楚,目前以 Spring Boot 作為後端開發框架,前端使用 React 搭配 Ant Design
下班之餘在 Amazing Talker 擔任程式語言講師,並獲得學員的一致好評
最近剛成立一個粉絲專頁-凱文大叔教你寫程式 歡迎大家多追蹤,我會不定期分享實用的知識以及程式開發技巧
想討論 Spring 的 Java 開發人員可以加入 FB 討論區 Spring Boot Developer Taiwan
我是凱文大叔,歡迎一起加入學習程式的行列